package jmine.tec.services.export.lenient;

import java.util.Collection;

import jmine.tec.services.api.export.EntityExporter;
import jmine.tec.services.api.export.EntityExporterRepository;
import jmine.tec.services.api.export.ExporterKey;

/**
 * Repositório de exportadores leniente. Declara ter exportador para toda e qualquer chave. Caso seja requisitado um exportador que não
 * existe de forma apropriada retorna um exportador default que simplesmente imprime um serviço COMENTADO que indica que não há exportador.
 * 
 * @author lundberg
 */
public class LenientEntityExporterRepository implements EntityExporterRepository {

    private EntityExporterRepository delegate;

    /**
     * {@inheritDoc}
     */
    public EntityExporter<?> findEntityExporter(ExporterKey key) {
        if (this.delegate.hasExporterFor(key)) {
            return this.delegate.findEntityExporter(key);
        } else {
            return new LenientEntityExporter(key);
        }
    }

    /**
     * {@inheritDoc}
     */
    public boolean hasExporterFor(ExporterKey key) {
        return true;
    }

    /**
     * {@inheritDoc}
     */
    public void register(Collection<? extends EntityExporter<?>> registers) {
        this.delegate.register(registers);
    }

    /**
     * @param delegate the delegate to set
     */
    public void setDelegate(EntityExporterRepository delegate) {
        this.delegate = delegate;
    }
}
